//////本项目为数字系统设计与Verilog HDL第六章变成习题。
//6.18题，模12的分频器
//时间：2022年6月7日、

///占空比1/2  8个资源    
module div_12(clk_in,rst_n,clk_out,qout);
    input clk_in,rst_n;
	 output reg clk_out;
	 output reg[3:0] qout;
	 
always@(posedge clk_in) begin
    if(!rst_n) begin
	   clk_out=0;
		qout=0;
		end
	 else if (qout==5) begin clk_out<=~clk_out; qout<=3'b0; end
	 else qout<=qout+1;
	 end
endmodule




//方法二  占用7个资源，占空比为1/3
module div_12(clk_in,rst_n,clk_out,qout);
    input clk_in,rst_n;
	 output reg clk_out;
	 output reg[3:0] qout;
	 
always@(posedge clk_in) begin
    if(!rst_n) begin
	  // clk_out=0;
		qout=0;
		end
	 else if (qout<11) qout<=qout+1; 
	 else qout<=0;
	 end
	 
always@(posedge clk_in) begin
    if(!rst_n) begin
	   clk_out=0;
		//qout=0;
		end
	 else if (qout>7&&qout<=11) begin clk_out<=1; end  //这里qout为11后，下一个时钟才为1.
	 else clk_out<=0;
	 end
	 
endmodule

//方法三 占用8个资源，占空比为1/3
module div_12(clk_in,rst_n,clk_out,qout);
    input clk_in,rst_n;
	 output  clk_out;
	 output reg[3:0] qout;
	 
always@(posedge clk_in) begin
    if(!rst_n) begin
	  // clk_out=0;
		qout=0;
		end
	 else if (qout<11) qout<=qout+1; 
	 else qout<=0;
	 end
assign  clk_out=(qout==11)?1:0; //这里qout为11时，立刻为1
endmodule



